export type FileType = "pdf" | "image" | "audio" | "video" | "text" | "other";

export function getFileType(fileName: string): FileType {
  const extension = fileName.split(".").pop()?.toLowerCase();

  if (extension === "pdf") return "pdf";

  if (["jpg", "jpeg", "png", "gif", "webp", "svg", "bmp", "tiff"].includes(extension || "")) {
    return "image";
  }

  if (["mp3", "wav", "ogg", "m4a", "aac", "flac"].includes(extension || "")) {
    return "audio";
  }

  if (["mp4", "webm", "ogg", "mov", "avi", "mkv", "wmv", "flv", "m4v"].includes(extension || "")) {
    return "video";
  }

  const textExtensions = [
    // Data formats
    "json",
    "json5",
    "jsonp",
    "txt",
    "csv",
    "xml",
    "svg",
    "toml",
    "yaml",
    "yml",
    "ini",
    "conf",
    "config",
    "env",
    "properties",

    // Documentation
    "md",
    "markdown",
    "adoc",
    "asciidoc",
    "rst",
    "textile",
    "wiki",
    "log",

    // Web technologies
    "html",
    "htm",
    "xhtml",
    "css",
    "scss",
    "sass",
    "less",
    "stylus",

    // JavaScript ecosystem
    "js",
    "jsx",
    "ts",
    "tsx",
    "mjs",
    "cjs",
    "vue",
    "svelte",
    "coffee",
    "coffeescript",

    // Programming languages
    "php",
    "py",
    "pyw",
    "rb",
    "java",
    "kt",
    "kts",
    "scala",
    "clj",
    "cljs",
    "cljc",
    "hs",
    "elm",
    "f#",
    "fs",
    "fsx",
    "vb",
    "vba",
    "c",
    "cpp",
    "cxx",
    "cc",
    "h",
    "hpp",
    "hxx",
    "cs",
    "go",
    "rs",
    "swift",
    "dart",
    "r",
    "rmd",
    "pl",
    "pm",

    // Shell scripts
    "sh",
    "bash",
    "zsh",
    "fish",
    "ps1",
    "bat",
    "cmd",

    // Database
    "sql",
    "plsql",
    "psql",
    "mysql",
    "sqlite",

    // Configuration files
    "dockerfile",
    "containerfile",
    "gitignore",
    "gitattributes",
    "gitmodules",
    "gitconfig",
    "editorconfig",
    "eslintrc",
    "prettierrc",
    "stylelintrc",
    "babelrc",
    "browserslistrc",
    "tsconfig",
    "jsconfig",
    "webpack",
    "rollup",
    "vite",
    "astro",

    // Package managers
    "package",
    "composer",
    "gemfile",
    "podfile",
    "pipfile",
    "poetry",
    "pyproject",
    "requirements",
    "cargo",
    "go.mod",
    "go.sum",
    "sbt",
    "build.gradle",
    "build.sbt",
    "pom",
    "build",

    // Build tools
    "makefile",
    "cmake",
    "rakefile",
    "gradle",
    "gulpfile",
    "gruntfile",
    "justfile",

    // Templates
    "hbs",
    "handlebars",
    "mustache",
    "twig",
    "jinja",
    "jinja2",
    "liquid",
    "ejs",
    "pug",
    "jade",

    // Data serialization
    "proto",
    "protobuf",
    "avro",
    "thrift",
    "graphql",
    "gql",

    // Markup & styling
    "tex",
    "latex",
    "bibtex",
    "rtf",
    "org",
    "pod",

    // Specialized formats
    "vim",
    "vimrc",
    "tmux",
    "nginx",
    "apache",
    "htaccess",
    "robots",
    "sitemap",
    "webmanifest",
    "lock",
    "sum",
    "mod",
    "workspace",
    "solution",
    "sln",
    "csproj",
    "vcxproj",
    "xcodeproj",

    // Additional programming languages
    "lua",
    "rb",
    "php",
    "asp",
    "aspx",
    "jsp",
    "erb",
    "haml",
    "slim",
    "perl",
    "awk",
    "sed",
    "tcl",
    "groovy",
    "scala",
    "rust",
    "zig",
    "nim",
    "crystal",
    "julia",
    "matlab",
    "octave",
    "wolfram",
    "mathematica",
    "sage",
    "maxima",
    "fortran",
    "cobol",
    "ada",
    "pascal",
    "delphi",
    "basic",
    "vb6",
    "assembly",
    "asm",
    "s",
    "nasm",
    "gas",
    "lisp",
    "scheme",
    "racket",
    "clojure",
    "erlang",
    "elixir",
    "haskell",
    "ocaml",
    "fsharp",
    "prolog",
    "mercury",
    "curry",
    "clean",
    "idris",
    "agda",
    "coq",
    "lean",
    "smalltalk",
    "forth",
    "factor",
    "postscript",
    "tcl",
    "tk",
    "expect",
    "applescript",
    "powershell",
    "autohotkey",
    "ahk",
    "autoit",
    "nsis",

    // Web assembly and low level
    "wasm",
    "wat",
    "wast",
    "wit",
    "wai",

    // Shaders
    "glsl",
    "hlsl",
    "cg",
    "fx",
    "fxh",
    "vsh",
    "fsh",
    "vert",
    "frag",
    "geom",
    "tesc",
    "tese",
    "comp",

    // Game development
    "gdscript",
    "gd",
    "cs",
    "boo",
    "unityscript",
    "mel",
    "maxscript",
    "haxe",
    "as",
    "actionscript",

    // DevOps & Infrastructure
    "tf",
    "tfvars",
    "hcl",
    "nomad",
    "consul",
    "vault",
    "packer",
    "ansible",
    "puppet",
    "chef",
    "salt",
    "k8s",
    "kubernetes",
    "helm",
    "kustomize",
    "skaffold",
    "tilt",
    "buildkite",
    "circleci",
    "travis",
    "jenkins",
    "github",
    "gitlab",
    "bitbucket",
    "azure",
    "aws",
    "gcp",
    "terraform",
    "cloudformation",

    // Documentation generators
    "jsdoc",
    "javadoc",
    "godoc",
    "rustdoc",
    "sphinx",
    "mkdocs",
    "gitbook",
    "jekyll",
    "hugo",
    "gatsby",
  ];

  if (textExtensions.includes(extension || "")) {
    return "text";
  }

  return "other";
}

export function getFileExtension(fileName: string): string {
  return fileName.split(".").pop()?.toLowerCase() || "";
}
